/**
 * 自动生成编号工具函数
 * 根据种子数据的编码规则生成
 */

/**
 * 生成销售订单单号
 * 根据种子数据：XSDH9051, XSDH6468, XSDH3257
 * @returns 生成的销售订单单号，格式：XSDH + 4位随机数
 */
export function generateSalesOrderCode(): string {
	const randomNum = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
	return `XSDH${randomNum}`;
}

/**
 * 生成采购订单单号
 * 根据种子数据：JHDH3839, JHDH3840, JHDH3841
 * @returns 生成的采购订单单号，格式：JHDH + 4位随机数
 */
export function generatePurchaseOrderCode(): string {
	const randomNum = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
	return `JHDH${randomNum}`;
}

/**
 * 生成进货退货订单单号
 * 根据种子数据：THDH6682, THDH3572, THDH2928
 * @returns 生成的进货退货订单单号，格式：THDH + 4位随机数
 */
export function generateReturnOrderCode(): string {
	const randomNum = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
	return `THDH${randomNum}`;
}

/**
 * 生成销售退货订单单号
 * 根据种子数据：XSTHDH1485, XSTHDH104, XSTHDH661
 * @returns 生成的销售退货订单单号，格式：XSTHDH + 4位随机数
 */
export function generateSalesReturnOrderCode(): string {
	const randomNum = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
	return `XSTHDH${randomNum}`;
}

/**
 * 生成客户编码
 * 根据种子数据：CUST001, CUST002, CUST003...
 * @returns 生成的客户编码，格式：CUST + 3位序号
 */
export function generateCustomerCode(): string {
	// 从种子数据看，客户编码是CUST001-CUST020，新生成的从CUST021开始
	const startNum = 21;
	const randomNum = Math.floor(Math.random() * 1000) + startNum;
	return `CUST${randomNum.toString().padStart(3, '0')}`;
}

/**
 * 生成供应商编码
 * 根据种子数据：SUP202412010001, SUP202412010002, SUP202412010003
 * @returns 生成的供应商编码，格式：SUP + YYYYMMDD + 4位序号
 */
export function generateSupplierCode(): string {
	const now = new Date();
	const year = now.getFullYear();
	const month = String(now.getMonth() + 1).padStart(2, '0');
	const day = String(now.getDate()).padStart(2, '0');
	const randomNum = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
	
	return `SUP${year}${month}${day}${randomNum}`;
}

/**
 * 生成货品编码
 * 根据种子数据：G001, G002, G003...
 * @returns 生成的货品编码，格式：G + 3位序号
 */
export function generateGoodsCode(): string {
	// 从种子数据看，货品编码是G001-G010，新生成的从G011开始
	const startNum = 11;
	const randomNum = Math.floor(Math.random() * 1000) + startNum;
	return `G${randomNum.toString().padStart(3, '0')}`;
}

/**
 * 生成出库单号
 * 根据种子数据：CKDH5704, CKDH1673, CKDH374
 * @returns 生成的出库单号，格式：CKDH + 4位随机数
 */
export function generateOutStockOrderCode(): string {
	const randomNum = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
	return `CKDH${randomNum}`;
}

/**
 * 生成入库单号
 * 根据模式推测：RKDH + 4位随机数
 * @returns 生成的入库单号，格式：RKDH + 4位随机数
 */
export function generateInStockOrderCode(): string {
	const randomNum = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
	return `RKDH${randomNum}`;
}

/**
 * 生成仓库编码
 * 根据现有数据格式：WH + 4位序号
 * @param existingCodes 现有的仓库编码数组
 * @returns 生成的仓库编码，格式：WH + 4位序号
 */
export function generateWarehouseCode(existingCodes: string[] = []): string {
	// 从现有编码中提取数字部分，找出最大值
	let maxNumber = 0;
	
	existingCodes.forEach(code => {
		if (code && code.startsWith('WH')) {
			const numberPart = code.substring(2);
			const num = parseInt(numberPart, 10);
			if (!isNaN(num) && num > maxNumber) {
				maxNumber = num;
			}
		}
	});
	
	// 生成下一个编码
	const nextNumber = maxNumber + 1;
	return `WH${nextNumber.toString().padStart(4, '0')}`;
}
